﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using BL;
using BE;



namespace UI.Secretaria
{
    public partial class frmNomina : System.Web.UI.Page
    {

        public List<Nomina_BE> listaEdita = new List<Nomina_BE>();
        protected void Page_Load(object sender, EventArgs e)
        {
            
            if(!IsPostBack)
            {
                try
                {
                    HttpContext.Current.Session["NOMINAEDITA"] = listaEdita;
                    llenaCombos();
                    seleccionaCombo();
                    llenaGrilla();
                    SeleccionaEstado();
            
                    
                }
                catch (Exception ex)
                {

                    lblMensajePrincipal.Text = "Ocurrio un error al iniciar: " + ex.Message;
                }


               
            }
        }


        void seleccionaCombo()
        {
           ddlSemestre.SelectedValue = Session["NOMINASEMESTRE"].ToString();
           ddlEspecialidad.SelectedValue= Session["NOMINAESPEC"].ToString();
           ddlCiclo.SelectedValue= Session["NOMINACICLO"].ToString();


        }

        void llenaGrilla()
        {
           


            HttpContext context = HttpContext.Current;
            List<Nomina_BE> lis = (List<Nomina_BE>)context.Session["NOMINAEDITA"];

           // lis.Clear();

            Alumno_BL obj = new Alumno_BL();


            lis = obj.Lista_DATA_MATRIC1_Edita(ddlSemestre.SelectedValue, ddlCiclo.SelectedValue, ddlEspecialidad.SelectedValue);

         


            if (lis.Count == 0)
            {
                lblMensajePrincipal.Text = "No existe registros";
            }


            else
            {
                lblMensajePrincipal.Text = "";
                grvAlumno.DataSource = lis;
                grvAlumno.DataBind();
                SeleccionaEstado();
            }




            HttpContext.Current.Session["NOMINAEDITA"] = lis;

            List<Nomina_BE> listo = (List<Nomina_BE>)context.Session["NOMINAEDITA"];

            CuentaItemsGrilla(lis);


        }

        void llenaCombos()
        {

            DataTable dato = new DataTable();
            Alumno_BL obj = new Alumno_BL();

            dato = obj.DATA_ESPECIALIDAD_ListaEspecialidades();
            ddlEspecialidad.DataSource = dato;
            ddlEspecialidad.DataTextField = "desesp";
            ddlEspecialidad.DataValueField = "cod_Espec";
            ddlEspecialidad.DataBind();
            ddlEspecialidad.Items.Insert(0, "--Selecciones--");


            dato.Clear();
            dato = obj.DATA_PERIODO_listaxSemestre("TODOS");
            ddlSemestre.DataSource = dato;
            ddlSemestre.DataTextField = "semestre";
            ddlSemestre.DataValueField = "semestre";
            ddlSemestre.DataBind();
            ddlSemestre.Items.Insert(0, "--Selecciones--");
        }

   

        protected void ddlSemestre_SelectedIndexChanged(object sender, EventArgs e)
        {

            //verifica que no exista nomina generada para el semestre seleccionado

        }

        protected void grvAlumno_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            try
            {
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    //DropDownList combo = (DropDownList)e.Row.FindControl("ddlEstadoAlumno");
                    //combo.ClearSelection();
                    //if (!object.ReferenceEquals(combo, DBNull.Value))
                    //{
                    //    this.llenaComboEstadoAlumno(combo);
                    //}

                    //DataRowView rowView = (DataRowView)e.Row.DataItem;
                    //combo.SelectedValue = rowView["Id_Estado_Condicion"].ToString();
                    

                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        void llenaComboEstadoAlumno(DropDownList combo)
        {

            Util_BL obj = new Util_BL();
            DataTable dato = new DataTable();
            dato = obj.ESTADO_CONDICION_listar();
            combo.DataSource = dato;
            combo.DataTextField = "Descripcion";
            combo.DataValueField = "Id_Estado_Condicion";
            combo.DataBind();


        }



        void SeleccionaEstado()
        {

            foreach (GridViewRow objItem in grvAlumno.Rows)
            {
                DropDownList ddl = ((DropDownList)objItem.Cells[0].FindControl("ddlEstadoAlumno"));

                //string IdProducto = objItem.Cells[1].Text; //Producto_id del Gridview.
                string id_EstadoAlumno = grvAlumno.DataKeys[objItem.RowIndex].Values["Condicion_Alumno"].ToString();
                ddl.SelectedValue = id_EstadoAlumno;

            }

        }

        protected void btnEliminar_Click(object sender, ImageClickEventArgs e)
        {


            EliminaRegistros();
        }

        void EliminaRegistros()
        {


            HttpContext context = HttpContext.Current;
            List<Nomina_BE> lis = (List<Nomina_BE>)context.Session["NOMINAEDITA"];
            Alumno_BL obj = new Alumno_BL();
            string codigo ="";
            string semestre="";
            string ciclo="";
            string especialidad="";

            foreach (GridViewRow objItem in grvAlumno.Rows)
            {
                CheckBox remove = ((CheckBox)objItem.Cells[0].FindControl("chkActivo"));
                if (remove.Checked == true)
                {

                     codigo = grvAlumno.DataKeys[objItem.RowIndex].Values["COD_ALUMNO"].ToString();
                     semestre = ddlSemestre.SelectedValue;
                     ciclo = ddlCiclo.SelectedValue;
                     especialidad = ddlEspecialidad.SelectedValue;

                     obj.DATA_MATRIC1_EliminaAlumno(codigo, semestre, ciclo, especialidad);
                   
                }
            }



            llenaGrilla();
            SeleccionaEstado();

           



        }

        protected void btnRegresar_Click(object sender, ImageClickEventArgs e)
        {
            Response.Redirect("~/Secretaria/frmConsultaNomina.aspx");
        }

        protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
        {

            // Se elimina la nomina y se vuelve a registrar
            try
            {
                eliminaNomina();
                registraNomina();
               // ImprimeNomina();
                lblMensajePrincipal.Text = "Actualización correcta";

                //fin

            }
            catch (Exception ex)
            {

                lblMensajePrincipal.Text = "Ocurrio un error al grabar: " + ex.Message;
            }

            
        }

        void eliminaNomina()

        {

            Alumno_BL obj = new Alumno_BL();
            obj.DATA_MATRIC_Elimina_Nomina(ddlSemestre.SelectedValue, ddlCiclo.SelectedValue, ddlEspecialidad.SelectedValue);

        }

        void registraNomina()
        {



            Alumno_BL obj = new Alumno_BL();

            DropDownList ddl;
            string id_EstadoAlumno;
            String semestre;
            String cod_espec;
            String ciclo;
            String cod_seccion;
            String cod_alumno;
            String condicion;
            String num_matricula;
            String estado;// indica activo
            String flag_confirmado;
            String usuario_registra;
            DateTime fecha_registro;
            String usuario_Modifica;
            DateTime fecha_Modifica;
            TextBox TEXTO;
            String RD;

            try
            {



                foreach (GridViewRow objItem in grvAlumno.Rows)
                {
                    ddl = ((DropDownList)objItem.Cells[0].FindControl("ddlEstadoAlumno"));
                    TEXTO = ((TextBox)objItem.Cells[0].FindControl("txtRD"));
                    id_EstadoAlumno = grvAlumno.DataKeys[objItem.RowIndex].Values["Condicion_Alumno"].ToString();
                    semestre = ddlSemestre.SelectedValue;
                    cod_espec = ddlEspecialidad.SelectedValue;
                    ciclo = ddlCiclo.SelectedValue;
                    cod_seccion = "A";
                    cod_alumno = grvAlumno.DataKeys[objItem.RowIndex].Values["COD_ALUMNO"].ToString();
                    condicion = ddl.SelectedValue;
                    num_matricula = "";
                    estado = "1";// indica activo
                    flag_confirmado = "0";
                    usuario_registra = grvAlumno.DataKeys[objItem.RowIndex].Values["Usuario_Registro"].ToString();
                    fecha_registro = Convert.ToDateTime(grvAlumno.DataKeys[objItem.RowIndex].Values["Fecha_Registro"].ToString());
                    usuario_Modifica = User.Identity.Name;
                    fecha_Modifica = DateTime.Now;
                    RD = TEXTO.Text;

                    obj.DATA_MATRIC1_Inserta_Nomina_Modifica(semestre, cod_espec, ciclo, cod_seccion, cod_alumno, condicion,
                                                            num_matricula, estado, flag_confirmado, 
                                                            usuario_registra, fecha_registro,usuario_Modifica,fecha_Modifica,RD);
                    lblMensajePrincipal.Text = "Registro Grabado Correctamente";

                    // btnProcesar.Enabled = false;



                }
            }

            catch (Exception ex)
            {
                lblMensajePrincipal.Text = "Ocurrio un error al Grabar: " + ex.Message;
            }







        }

        protected void btnBuscarModal_Click(object sender, EventArgs e)
        {
            llenaGrillaAgregaAlumnos();
        }
        void llenaGrillaAgregaAlumnos()
        {

            /* Obteniendo el semestre activo*/

           
            Nomina_BE detalle = new Nomina_BE();
            Alumno_BL obj = new Alumno_BL();
            DataTable dato = new DataTable();

           

            /*Fin*/
            String codigo = "";

            if (txtCodigo.Text.Length == 0)
            {
                codigo = "TODOS";


            }

            else
            {
                codigo = txtCodigo.Text.Trim();

            }
            dato.Clear();

            dato = obj.DATA_MATRIC1_AgregaAlumnos(ddlSemestre.SelectedValue, ddlCiclo.SelectedValue, ddlEspecialidad.SelectedValue, ddlSemestre.SelectedValue, codigo);

            if (dato.Rows.Count == 0)
            {
                lblMensaje.Text = "No se encontraron registros.";

            }

            else
            {
                lblMensaje.Text = "";
                grvAgregaAlumnos.DataSource = dato;
                grvAgregaAlumnos.DataBind();
                CuentaItemsGrilla(dato);
            }





        }

        protected void grvAgregaAlumnos_SelectedIndexChanged(object sender, EventArgs e)
        {
            

            HttpContext context = HttpContext.Current;
            List<Nomina_BE> lista3 = (List<Nomina_BE>)context.Session["NOMINAEDITA"];
            Nomina_BE OBJ = new Nomina_BE();

            OBJ.COD_ALUMNO = grvAgregaAlumnos.SelectedRow.Cells[1].Text;
            OBJ.Nombres = Server.HtmlDecode(grvAgregaAlumnos.SelectedRow.Cells[2].Text);// para que no muestre caracteres extraños
            OBJ.COD_ESPEC = grvAgregaAlumnos.SelectedRow.Cells[4].Text;
            OBJ.Condicion_Alumno = Convert.ToInt32(grvAgregaAlumnos.SelectedRow.Cells[5].Text);
            OBJ.Descripcion_Estado = grvAgregaAlumnos.SelectedRow.Cells[6].Text;
            OBJ.Edad = grvAgregaAlumnos.SelectedRow.Cells[7].Text;
            OBJ.Semestre = ddlSemestre.SelectedValue;
            OBJ.Usuario_Registro = grvAgregaAlumnos.SelectedRow.Cells[8].Text; 
            OBJ.Fecha_Registro = Convert.ToDateTime(grvAgregaAlumnos.SelectedRow.Cells[10].Text);
            OBJ.SEXO = grvAgregaAlumnos.SelectedRow.Cells[10].Text; 

            if (lista3.Exists(delegate(Nomina_BE x) { return x.COD_ALUMNO == OBJ.COD_ALUMNO; }))
            {
                lblMensaje.Text = "El Alumno con ID: " + OBJ.COD_ALUMNO + " ya existe";
            }
            else
            {
                lista3.Add(OBJ);
                grvAlumno.DataSource = lista3;
                grvAlumno.DataBind();
                SeleccionaEstado();

                HttpContext.Current.Session["NOMINAEDITA"] = lista3;

                DataTable limpia = new DataTable();
                grvAgregaAlumnos.DataSource = limpia;
                grvAgregaAlumnos.DataBind();

            }



        }

        protected void btnSalir_Click(object sender, EventArgs e)
        {
            mpeAgregaAlumno.Hide();
        }

        protected void btnAgregar_Click(object sender, ImageClickEventArgs e)
        {
            mpeAgregaAlumno.Show();
        }

        void ImprimeNomina()
        {

            String cicloRomano = "";
            Util_BL objUtil2 = new Util_BL();
            cicloRomano = objUtil2.CICLO_ROMANO(ddlCiclo.SelectedValue);

            // se arma un datatable co los datos de especialidad ciclo escuela
            Util_BL objUtil = new Util_BL();
            DataTable dato = new DataTable();
            DataTable dato2 = new DataTable();
            DataTable dato3 = new DataTable();
            dato = objUtil.DATA_ESPECIALIDAD_ListaPorCodigo(ddlEspecialidad.SelectedValue);
            dato2 = objUtil.DATA_MATRIC1_CuentaPorSexo(ddlSemestre.SelectedValue, ddlEspecialidad.SelectedValue, ddlCiclo.SelectedValue, "F"); // CUENTA SEXO FEMENINO
            dato3 = objUtil.DATA_MATRIC1_CuentaPorSexo(ddlSemestre.SelectedValue, ddlEspecialidad.SelectedValue, ddlCiclo.SelectedValue, "M"); // CUENTA SEXO MASCULINO

            DataTable Cabecera = new DataTable();
            Cabecera.Columns.Add("SEMESTRE_ACADEMICO");
            Cabecera.Columns.Add("ESCUELA_PROFESIONAL");
            Cabecera.Columns.Add("ESPECIALIDAD");
            Cabecera.Columns.Add("CICLO");
            Cabecera.Columns.Add("CONTEO_SEXOF");
            Cabecera.Columns.Add("CONTEO_SEXOM");

            DataRow fila = Cabecera.NewRow();
            fila[0] = ddlSemestre.SelectedValue;
            fila[1] = dato.Rows[0]["Descripcion"].ToString();
            fila[2] = ddlEspecialidad.SelectedItem.Text;
            fila[3] = cicloRomano;
            fila[4] = dato2.Rows[0]["SEXO"].ToString();
            fila[5] = dato3.Rows[0]["SEXO"].ToString();


            Cabecera.Rows.Add(fila);

            Cabecera.AcceptChanges();
            Cabecera.TableName = "Cabecera";


            DataTable Detalle = new DataTable();
            Detalle.Columns.Add("Codigo");
            Detalle.Columns.Add("ApellidosyNombres");
            Detalle.Columns.Add("Condicion");
            Detalle.Columns.Add("Edad");
            Detalle.Columns.Add("Sexo");
            Detalle.Columns.Add("Observacion");




            // se obtiene los datos del detalle
            DropDownList ddl;
            String codigo;
            String nombres;
            String estado;
            String edad;
            String sexo;
            String OBS;
            foreach (GridViewRow objItem in grvAlumno.Rows)
            {
                ddl = ((DropDownList)objItem.Cells[0].FindControl("ddlEstadoAlumno"));


                codigo = grvAlumno.DataKeys[objItem.RowIndex].Values["COD_ALUMNO"].ToString();
                nombres = grvAlumno.DataKeys[objItem.RowIndex].Values["Nombres"].ToString();
                estado = ddl.SelectedItem.Text.Trim();
                edad = grvAlumno.DataKeys[objItem.RowIndex].Values["Edad"].ToString();
                sexo = grvAlumno.DataKeys[objItem.RowIndex].Values["SEXO"].ToString();
                OBS = "";
                DataRow fila2 = Detalle.NewRow();
                fila2[0] = codigo;
                fila2[1] = nombres;
                fila2[2] = estado;
                fila2[3] = edad;
                fila2[4] = sexo;
                fila2[5] = OBS;
                Detalle.Rows.Add(fila2);

            }

            //fin
            // ImprimeNomina2(Cabecera, Detalle);
            Session.Remove("DatoNomina");
            Session.Remove("DetalleNomina");
            Session["DatoNomina"] = Cabecera;
            Session["DetalleNomina"] = Detalle;




            string script = "<script>window.open('frmReporte2.aspx');</script>";
            ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "CERRAR", script, false);



        }

        protected void grvAgregaAlumnos_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            GridView gv = (GridView)sender;
            gv.PageIndex = e.NewPageIndex;
            llenaGrillaAgregaAlumnos();
        }

        public void CuentaItemsGrilla(DataTable dato)
        {
            if (dato.Rows.Count == 0)
            {
                grvAgregaAlumnos.Caption = "No se encontró coincidencias";
            }
            else if (dato.Rows.Count == 1)
            {
                grvAgregaAlumnos.Caption = "Total de items - 1 registro encontrado";
            }
            else
            {
                grvAgregaAlumnos.Caption = "Total de items - " + dato.Rows.Count + " registros encontrados";
            }
        }

        public void CuentaItemsGrilla(List<Nomina_BE> lis)
        {
            if (lis.Count == 0)
            {
                grvAlumno.Caption = "No se encontró coincidencias";
            }
            else if (lis.Count == 1)
            {
                grvAlumno.Caption = "Total de items - 1 registro encontrado";
            }
            else
            {
                grvAlumno.Caption = "Total de items - " + lis.Count + " registros encontrados";
            }
        }



    }
}